\section{Descripci\'on de la implementaci\'on de la soluci\'on}

Para la realizaci\'on del presente trabajo pr\'actico se utilizaron las herramientas generadoras de c\'odigo \textit{Flex} para el analizador l\'exico y \textit{Bison} para el analizador sint\'actico. Los archivos de entrada para cada herramienta son tp.l y tp.y respectivamente.\par

\subsection*{Analizador L\'exico}

Los tipos de tokens est\'an definidos al igual que la gram\'atica  en el archivo de entrada para Bison. Para cada token hay una expresi\'on regular correspondiente. En el caso de los n\'umeros distingue entre enteros y de punto flotante, con signo opcional. Para los nombres acepta una cadena alfanum\'erica que comience con al menos una letra. Para el resto hay una expresi\'on regular que acepta una cadena igual al nombre del token pero sin distinguir entre may\'usculas y min\'usculas. Por el modo en que trabaja Flex, en caso de que haya coincidencia en m\'as de una e.r. se acepta la cadena m\'as larga posible, es por eso que, por ejemplo, la cadena ``box8'' ser\'a aceptada como token \textbf{name}.\par

Para los tokens \textbf{int} y \textbf{float} se asocia como valor sem\'antico el n\'umero correspondiente a la entrada (la cadena aceptada por la expresi\'on regular), es decir se hace la conversi\'on de tipos adecuada. En el caso de los nombres, se asocia la misma cadena aceptada de la entrada pero pasando las letras may\'usculas a min\'usculas. De esta manera el analizador sint\'actico recibe como valor sem\'antico asociado al token \textbf{name} una cadena alfanum\'erica con letras min\'usculas solamente.\par

Cualquier otro s\'imbolo que no sea aceptado por las expresiones regulares se env\'ian igualmente al analizador sint\'actico, a excepci\'on de los espacios, tabulaciones y fines de l\'inea, que son ignorados.\par

Tambi\'en se aprovecha esta etapa para llevar a cabo el conteo de filas y columnas en la entrada de manera de poder informarlo en caso de error.

La entrada de datos se toma desde la entrada est\'andar.

\subsection*{Analizador Sint\'actico}

En primer lugar est\'a definido el tipo de la variable \textbf{yylval} que es utilizada por el analizador l\'exico para pasarle los valores sem\'anticos al analizador sint\'actico. La definici\'on es como ``union'' de \textbf{int}, \textbf{float} y \textbf{char*} que son los tres posibles valores. \par

La gram\'atica es la correspondiente a la secci\'on \ref{sec:def}. Las acciones definidas en los lados derechos de las producciones son las necesarias para realizar la traducci\'on correspondiente, la cual se escribe en la salida est\'andar.\par

En caso de error sint\'actico (por una cadena no perteneciente al lenguaje) se informa la fila y columna en las cuales se encontr\'o (funci\'on \textbf{yyerror}), adem\'as de indicar el tipo de token le\'ido y cual era el esperado. Adem\'as de esto hay dos casos m\'as de error, que tienen que ver con los valores sem\'anticos. El primero ocurre si la funci\'on ``repeat'' recibe como primer par\'ametro un n\'umero menor a uno. El otro ocurre si se utiliza un ``nombre'' que no fue previamente definido con la funci\'on ``define''.\par

Para guardar los nombres definidos se tiene un conjunto de cadenas (implementado como \textit{trie}) en el cual se guardan cada vez que se reconoce un uso de la funci\'on ``define''. Este conjunto se utiliza luego para verificar cada nombre reconocido como nombre de gr\'afico ya definido.\par

